package com.leetcode.August;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * @Description: 两两交换链表中的节点
 * @Author: Mr.Fxy
 * @CreateTime: 2024-07-29 09:29
 */
public class swapNodes {
    public ListNode swapPairs(ListNode head) {
        List<Integer> list = new ArrayList<>();
        ListNode current = head;
        while (current != null) {
            list.add(current.val);
            current = current.next;
        }
        for (int i = 0; i < list.size()-1; i += 2){
            Collections.swap(list, i, i + 1);
        }
        ListNode dummy = new ListNode(0);
        ListNode tail = dummy;
        for (Integer val : list) {
            //新的节点成为了 tail 节点的下一个节点
            tail.next = new ListNode(val);
            tail = tail.next;
            //tail 指针更新为它当前指向的节点的下一个节点。由于我们刚刚把新节点设为了 tail.next，所以 tail = tail.next; 实际上就是让 tail 指向新添加的节点。
        }
        return dummy.next;
    }
    //方法二
//    public ListNode swapPairs(ListNode head) {
//        if (head==null || head.next==null){
//            return head;
//        }
//        ListNode node1=head;
//        ListNode node2=head.next;
//        ListNode node3=node2.next;
//        node1.next=swapPairs(node3);
//        node2.next=node1;
//        return node2;
    }
}

